﻿using Seg.Entidades;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Seg.Datos
{
    public class PerfilDatos
    {
        BD_SEGEntities context = new BD_SEGEntities();

        public int Eliminar(int id)
        {
            var objUpd = context.Perfil.Where(x => x.CodigoPerfil == id).FirstOrDefault();
            objUpd.Anulado = true;
            var r = context.SaveChanges();
            return r;
        }

        public List<Perfil> Listar(decimal CodigoSistema, decimal CodigoModulo, decimal CodigoPerfil, string anulado)
        {
            var datos = new List<Seg.Entidades.Perfil>();

            if (anulado == "0")
            {
                datos = context.Perfil.Where(x =>
                    ((x.CodigoPerfil == CodigoPerfil || CodigoPerfil == 0)
                    && (x.CodigoModulo == CodigoModulo || CodigoModulo == 0)
                    && (x.Modulo.CodigoSistema == CodigoSistema || CodigoSistema == 0))
                ).ToList();
            }
            else
            {
                var anul = anulado == "A" ? false : true;
                datos = context.Perfil.Where(x =>
                    ((x.CodigoPerfil == CodigoPerfil || CodigoPerfil == 0)
                    && (x.CodigoModulo == CodigoModulo || CodigoModulo == 0)
                    && (x.Modulo.CodigoSistema == CodigoSistema || CodigoSistema ==0)
                    && (x.Anulado == anul))
                ).ToList();
            }

            return datos;
        }
        public int Insertar(Perfil entidad)
        {
            entidad.CodigoPerfil = GenerarCodigo();
            context.Perfil.Add(entidad);
            context.SaveChanges();
            return 1;
        }
        public int Actualizar(Perfil entidad)
        {
            var objUpd = context.Perfil.Where(x => x.CodigoPerfil == entidad.CodigoPerfil).FirstOrDefault();

            objUpd.Nombre = entidad.Nombre;
            objUpd.Descripcion = entidad.Descripcion;
            objUpd.CodigoModulo = entidad.CodigoModulo;
            objUpd.Anulado = entidad.Anulado;

            context.SaveChanges();
            return 1;
        }
        public Perfil ObtenerPerfil(decimal CodigoPerfil)
        {
            var datos = new Seg.Entidades.Perfil();
            datos = context.Perfil.Where(x =>
                (x.CodigoPerfil == CodigoPerfil)
            ).FirstOrDefault();
            return datos;
        }
        int GenerarCodigo()
        {
            var actual = context.Perfil.Max(x => x.CodigoPerfil);
            return actual + 1;
        }
        public List<Perfil> ListarXModulo(   int CodigoModulo, int CodigoPerfil )
        {
            var datos = new List<Seg.Entidades.Perfil>();
            datos = context.Perfil.Where(x =>
                (x.CodigoModulo == CodigoModulo || CodigoModulo == 0)
                && (x.CodigoPerfil == CodigoPerfil || CodigoPerfil == 0)
                && (x.Anulado == false)
                ).ToList();
            return datos;
        }
        public List<SEGSS_PERFIL_X_SISTEMA_Result> ListarPerfilXSistema(int CodigoSistema)
        {
            var datos = context.SEGSS_PERFIL_X_SISTEMA(CodigoSistema).ToList();
            return datos;
        }
        public List<Perfil> ListaPerfilXModulo(int CodigoModulo)
        {
            var datos = new List<Seg.Entidades.Perfil>();
            datos = context.Perfil.Where(x =>
                (x.CodigoModulo == CodigoModulo)
                && (x.Anulado == false)).ToList();
            return datos;
        }

        /// <summary>
        /// Obtiene la lista de Perfiles de un usuario-oficina-sistema
        /// </summary>
        /// <param name="CodigoUsuarioOficina"></param>
        /// <param name="PrefijoSist"></param>
        /// <returns></returns>
        public List<SEGSS_PERFILUSUARIO_X_CODIGO_Result> ListaPerfilXSistema(int CodigoUsuarioOficina, string PrefijoSist)
        {
            var datos = new List<Seg.Entidades.SEGSS_PERFILUSUARIO_X_CODIGO_Result>();
            datos = context.SEGSS_PERFILUSUARIO_X_CODIGO(CodigoUsuarioOficina, PrefijoSist).ToList();
            return datos;
        }

    }
}
